graph TD
    A[程序开始] --> B[初始化GLFW]
    B --> C[设置GLFW参数]
    C --> D[创建窗口]
    D --> E{窗口创建成功?}
    E -->|否| F[输出错误信息]
    F --> G[终止GLFW]
    G --> H[返回-1]
    E -->|是| I[设置当前上下文]
    I --> J[初始化GLAD]
    J --> K{GLAD初始化成功?}
    K -->|否| L[输出错误信息]
    L --> M[返回-1]
    K -->|是| N[创建VAO和VBO]
    N --> O[绑定VAO和VBO]
    O --> P[定义顶点数据]
    P --> Q[将顶点数据载入VBO]
    Q --> R[创建顶点着色器]
    R --> S[编译顶点着色器]
    S --> T{编译成功?}
    T -->|否| U[输出错误日志]
    T -->|是| V[创建片段着色器]
    U --> V
    V --> W[编译片段着色器]
    W --> X{编译成功?}
    X -->|否| Y[输出错误日志]
    X -->|是| Z[创建着色器程序]
    Y --> Z
    Z --> AA[附加着色器到程序]
    AA --> AB[链接着色器程序]
    AB --> AC{链接成功?}
    AC -->|否| AD[输出错误日志]
    AC -->|是| AE[删除着色器对象]
    AD --> AE
    AE --> AF[激活着色器程序]
    AF --> AG[设置顶点属性指针]
    AG --> AH[启用顶点属性]
    AH --> AI[注册回调函数]
    AI --> AK[进入渲染循环]
    AK --> AL{窗口应关闭?}
    AL -->|是| AM[清理资源]
    AL -->|否| AN[处理输入]
    AN --> AO[设置清除颜色]
    AO --> AP[清除颜色缓冲]
    AP --> AQ[使用着色器程序]
    AQ --> AR[绑定VAO]
    AR --> AS[绘制三角形]
    AS --> AT[交换缓冲区]
    AT --> AU[轮询事件]
    AU --> AK
    AM --> AV[删除VAO,VBO,着色器程序]
    AV --> AW[终止GLFW]
    AW --> AX[程序结束]